package Interfaz;

import java.awt.*;
import java.awt.event.*;

import javax.swing.JPanel;

import Logica.RebotarPelotaLimites;

@SuppressWarnings("serial")
public class PanelJuego extends JPanel implements Runnable, KeyListener {

	private int posXPelota,// Posicion X de la Pelota
			posYPelota,// Posicion Y de la Pelota
			velocidad,// Velocidad del Juego
			velXPelota,// Velocidad X de la Pelota
			velYPelota,// Velocidad Y de la Pelota
			posXRaqueta,// Posicion X de la Raqueta
			posYRaqueta,// Posicion Y de la Raqueta
			puntaje,// Contador para el puntaje
			correrJuego;// Entero para que el juego siga corriendo

	Thread hilo;// Hilo para que corra el juego

	public PanelJuego() {
		correrJuego = 1;
		velocidad = 4;
		posXPelota = (int) (Math.random() * 500);
		posXRaqueta = (int) (Math.random() * 300);
		posYPelota = 0;
		posYRaqueta = 460;
		velXPelota = 1;
		velYPelota = 1;
		puntaje = 0;
		hilo = new Thread(this);
		hilo.start();
	}

	@Override
	public void paint(Graphics g) {
		super.paint(g);
		if(correrJuego == 1){
			this.setBackground(new Color(255, 255, 255));
			g.setColor(new Color(0, 128, 255));
			g.fillOval(posXPelota, posYPelota, 50, 50);
			g.setColor(new Color(240, 60, 15));
			g.fillRect(posXRaqueta, posYRaqueta, 200, 30);
			g.setColor(new Color(0, 0, 0));
			g.setFont(new Font("Arial", Font.PLAIN, 20));
			String puntos = String.valueOf(puntaje);
			g.drawString(puntos, 50, 50);
			return;
		}
		String puntos = String.valueOf(puntaje);
		this.setBackground(new Color(255, 255, 255));
		g.setFont(new Font("Arial", Font.PLAIN, 50));
		g.setColor(new Color(0, 0, 0));
		g.drawString("Su puntaje es:", this.getWidth()/2 - 140, this.getHeight()/2 - 50);
		g.drawString(puntos, this.getWidth()/2, this.getHeight()/2 + 20);
		
	}

	public void correrJuego(){
		int altoPanel = this.getHeight();
		int anchoPanel = this.getWidth();
		
		int[] datos = new RebotarPelotaLimites().rebotarPelota(posXPelota, posYPelota, posXRaqueta, posYRaqueta, velXPelota, velYPelota, puntaje, correrJuego, altoPanel, anchoPanel);

		this.posXPelota = datos[0];
		this.posYPelota = datos[1];
		this.posXRaqueta = datos[2];
		this.posYRaqueta = datos[3];
		this.velXPelota = datos[4];
		this.velYPelota = datos[5];
		this.puntaje = datos[6];
		this.correrJuego = datos[7];
	}
	
	@Override @SuppressWarnings("static-access")
	public void run() {
		while (correrJuego == 1) {
			try {
				hilo.sleep(velocidad);
				correrJuego();
				posXPelota += velXPelota;
				posYPelota += velYPelota;
				this.repaint();
				// this.run();
			} catch (InterruptedException ex) {};
		}
		if(correrJuego == 0){
			this.removeAll();
			this.validate();
			this.repaint();
		}
	}

	@Override
	public void keyPressed(KeyEvent e) {
		int KeyCode = e.getKeyCode();
		if (KeyCode == KeyEvent.VK_LEFT && posXRaqueta > 5) {
			posXRaqueta -= 15;
		}
		if (KeyCode == KeyEvent.VK_RIGHT && posXRaqueta < 475) {
			posXRaqueta += 15;
		}
	}

	@Override
	public void keyReleased(KeyEvent e) {};

	@Override
	public void keyTyped(KeyEvent e) {};
	
	public int getPosXPelota() {
		return posXPelota;
	}
	
	public int getPosXRaqueta() {
		return posXRaqueta;
	}
	
	public int getPosYPelota() {
		return posYPelota;
	}
	
	public int getPosYRaqueta() {
		return posYRaqueta;
	}
}
